{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "77a129ad-af0b-4cf1-9fbb-e5185f8a9199",
   "metadata": {},
   "source": [
    "Chapter 21\n",
    "# 拉普拉斯矩阵谱分析\n",
    "Book_6《数据有道》 | 鸢尾花书：从加减乘除到机器学习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f87e6a79-8361-4a2c-91cb-dac4d2224ed0",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import networkx as nx\n",
    "import numpy.linalg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "7288fda9-9159-4870-8d67-67255cca93d9",
   "metadata": {},
   "outputs": [],
   "source": [
    "n = 1000  # 1000 nodes\n",
    "m = 5000  # 5000 edges\n",
    "G = nx.gnm_random_graph(n, m, seed=8)  \n",
    "# 创建图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ac3413a6-4048-40fb-95ea-1b6b9fa78b84",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Largest eigenvalue: 25.78116749998174\n",
      "Smallest eigenvalue: -5.246605179288344e-14\n"
     ]
    }
   ],
   "source": [
    "# 拉普拉斯矩阵谱分解\n",
    "eig_values_L = nx.laplacian_spectrum(G)\n",
    "\n",
    "# 验证\n",
    "# L = nx.laplacian_matrix(G)\n",
    "# numpy.linalg.eigvals(L.toarray())\n",
    "print(\"Largest eigenvalue:\", max(eig_values_L))\n",
    "print(\"Smallest eigenvalue:\", min(eig_values_L))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "0e9275b6-9c83-4632-a7b9-17df9b955775",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 600x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize = (6,3))\n",
    "ax.hist(eig_values_L, bins=100, \n",
    "        ec = 'k', range = [0,25])\n",
    "ax.set_ylabel(\"Count\")\n",
    "ax.set_xlabel(\"Eigenvalues of Laplacian matrix\")\n",
    "ax.set_xlim(0,25)\n",
    "ax.set_ylim(0,30)\n",
    "plt.savefig('拉普拉斯矩阵谱.svg')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "40979a11-0b43-4a07-9a78-decd333d1cb0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Largest eigenvalue: 1.5998038843455142\n",
      "Smallest eigenvalue: 2.220446049250313e-16\n"
     ]
    }
   ],
   "source": [
    "# 归一化拉普拉斯矩阵谱分解\n",
    "eig_values_L_N = nx.normalized_laplacian_spectrum(G)\n",
    "\n",
    "# L_N = nx.normalized_laplacian_matrix(G)\n",
    "# numpy.linalg.eigvals(L_N.toarray())\n",
    "\n",
    "print(\"Largest eigenvalue:\", max(eig_values_L_N))\n",
    "print(\"Smallest eigenvalue:\", min(eig_values_L_N))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "015441d0-d2bf-4552-ac6d-c37947cbb132",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 600x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize = (6,3))\n",
    "ax.hist(eig_values_L_N, bins=100, \n",
    "        ec = 'k', range = [0,2])\n",
    "ax.set_ylabel(\"Count\")\n",
    "ax.set_xlabel(\"Eigenvalues of normalized Laplacian matrix\")\n",
    "ax.set_xlim(0,2)\n",
    "ax.set_ylim(0,30)\n",
    "plt.savefig('归一化拉普拉斯矩阵谱.svg')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "24132ac3-4906-4988-9a25-724203a56a16",
   "metadata": {},
   "source": [
    "参考：\n",
    "https://networkx.org/documentation/stable/auto_examples/drawing/plot_eigenvalues.html"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
